<?php

namespace app\communal\controller;

use app\Param;
use app\model\QuestionClass as ModelQuestionClass;
use app\logic\Page AS LogicPage;

class Question extends Param
{
    protected $arr_module_name = ['user' => '用户端']; // 模块名称

    protected $arr_module_name_key = [];

    public function _initialize()
    {
        parent::_initialize();
        $this->arr_module_name_key = array_keys($this->arr_module_name);
    }

    /**
     * 获取可用的分类列表 \n
     * URI : /public/question.class.list
     * @param :
     *  name          |  type  | null | description
     * ---------------|--------|------|-------------
     *  moduleName    | string | 必填  | 模块名称 user-用户端、courier-快递、driver-司机端
     *
     * @return
     *  name      |  type  | description
     * -----------|--------|-------------
     *  totalPage | string | 总页数
     *  list      | array  | 列表
     *
     * list:
     *  name    | type   | description
     * ---------|--------|-------------
     *  classId | int    | 分类ID
     *  title   | string | 问题标题
     */
    public function questionClassList()
    {
        $str_module_name = $this->_getContentParams('moduleName');
        _toCompare(in_array($str_module_name, $this->arr_module_name_key), '===', false, 19030); // 模块名称不正确
        $arr_where = [
            'client' => $str_module_name,
            'is_show' => 1,
        ];
        $int_now_page = 1;
        $int_list_rows = 100;
        $str_field = 'id AS classId,name';
        $obj = ModelQuestionClass::getInstance();
        $arr_list = LogicPage::getInstance()->getList($obj, $arr_where, $str_field, $int_now_page, $int_list_rows, 'sort ASC');
        _returnData($arr_list);
    }

    /**
     * 获取所有模块名称列表 \n
     * URI : /communal/question.module.name.list
     * @param :
     *  name  | type  | null | description
     * -------|-------|------|-------------
     *  ----- | ----- | ---- | 无
     *
     * @return
     *  name      |  type  | description
     * ---------|--------|-------------
     *  classId | int    | 分类ID
     *  title   | string | 问题标题
     */
    public function getModuleNameList()
    {
        _returnData(['list' => $this->arr_module_name]);
    }

    /**
     * 更新排序
     * @param object $obj
     * @param $int_id
     * @param $int_error_code
     */
    protected function updateSort($obj, $int_id, $int_error_code)
    {
        $bool_result = $obj->checkId($int_id);
        _toCompare($bool_result, '==', false, $int_error_code);

        $int_sort = $this->checkSortParam();
        $obj->toUpdate(['id' => $int_id], ['sort' => $int_sort]);
        _returnData();
    }

    /**
     * 更新是否展示字段
     * @param object $obj
     * @param $int_id
     * @param $int_error_code
     */
    protected function updateIsShow($obj, $int_id, $int_error_code)
    {
        $bool_result = $obj->checkId($int_id);
        _toCompare($bool_result, '==', false, $int_error_code);
        $int_is_show = $this->checkIsShowParam();
        ModelQuestionClass::getInstance()->toUpdate(['id' => $int_id], ['is_show' => $int_is_show]);
        _returnData();
    }

    /**
     * 删除指定记录
     * @param object $obj
     * @param $int_id
     * @param $int_error_code
     */
    protected function deleteData($obj, $int_id, $int_error_code)
    {
        $bool_result = $obj->checkId($int_id);
        _toCompare($bool_result, '==', false, $int_error_code);
        $obj->toDelete(['id' => $int_id]);
        _returnData();
    }

    /**
     * 检查IsShow参数
     * @return $int_is_show
     */
    protected function checkIsShowParam()
    {
        $int_is_show = intval($this->_getContentParams('isShow', -1));
        _toCompare(in_array($int_is_show, [0, 1]), '===', false, 13006);
        return $int_is_show;
    }

    /**
     * 检查sort参数
     * @return int
     */
    protected function checkSortParam()
    {
        $int_sort = intval(intval($this->_getContentParams('sort', -1)));
        _toCompare(($int_sort >= 0), '===', false, 13008);
        return $int_sort;
    }
}
